'''
列表推导式
    [表达式 for item in 可迭代对象]
    或者：[表达式 for item in 可迭代对象 if 条件判断]
字典推导式
    {key_expression:value_expression for 表达式 in 可迭代对象}
集合推导式
    {表达式 for item in 可迭代对象}
    或者：{表达式 for item in 可迭代对象 if 条件判断}
生成器推导式（不直接生成元组，元组也没有推导式，用小括号也不行，用小括号是生成一个生成器）
    生成器对象只能使用一次
'''
print('列表推导式'.center(40, '-'))
# 列表推导式
print([x for x in range(1, 5)])  # [1, 2, 3, 4]
print([x * 2 for x in range(1, 5)])  # [2, 4, 6, 8]
print([x * 2 for x in range(1, 20) if x % 5 == 0])  # [10, 20, 30]
print(list(a for a in 'abcdefg'))  # ['a', 'b', 'c', 'd', 'e', 'f', 'g']
print('zip并行迭代'.center(40, '-'))
# 可以使用两个循环，使用zip并行迭代
cells = [(row, col, a) for row, col, a in zip(range(1, 10), range(101, 110), range(1001, 1010))]
# for cell in cells:
#     print(cell)
print(cells)
print('集合推导式'.center(40, '-'))
# 集合推导式
print({x for x in range(1, 5)})

print('使用和使用推导式对比'.center(40, '-'))
print('使用推导式'.center(20, '-'))
a = [x for x in range(1, 10) if x % 2 == 0]
print(a)
print('不使用推导式'.center(20, '-'))
a = []
for x in range(1, 10):
    if x % 2 == 0:
        a.append(x)
print(a)

print('字典推导式'.center(40, '-'))
# 类似月列表推导式，字典推导式也可以增加if条件判断、多个for循环
values = ['北京', '上海', '广州', '深圳']
cities = {id * 100: city for id, city in zip(range(1, 5), values)}  # {100: '北京', 200: '上海', 300: '广州', 400: '深圳'}
print(cities)

print('字典推导式'.center(40, '-'))
# 统计字符出现次数
my_text = 'i love you, i love sxt,i love lijinqiu'
print({char: my_text.count(char) for char in my_text})

cities = {'北京', '上海', '广州', '深圳'}
print({id: city for id, city in zip(range(1, 5), cities)})

# 生成器推导式，只能使用一次
tuple_test = (i for i in range(5))
# print(tuple(tuple_test))
for i in tuple_test:
    print(i, end='\\')
for i in tuple_test:
    print(i + 'dsa', end='\\')
